﻿using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;

namespace Nx.Services
{
    public interface IEndpointFactory : IDisposable
    {
        ServiceEndpoint CreateEndpoint<TContract>(Binding binding, string uri, string endpointName);
        ServiceEndpoint CreateEndpoint<TContract>(Binding binding, string uri, string endpointName, string ns);
        ServiceEndpoint CreateEndpoint<TContract>(Binding binding, EndpointAddress address, string endpointName);
        ServiceEndpoint CreateEndpoint<TContract>(Binding binding, EndpointAddress address, string endpointName, string ns);
        ServiceEndpoint CreateNetNamedPipeEndpoint<TContract>(string uri, string endpointName);
        ServiceEndpoint CreateHttpBinaryEndpoint<TContract>(string uri, string endpointName);
        ServiceEndpoint CreateMexEndpoint(string uri);
        ServiceEndpoint CreateMexTcpEndpoint(string uri);
    }
}
